0x6080604052600436106101e75760003560e01c806384b0196e11610102578063ddca3f4311610095578063f2fde38b11610064578063f2fde38b14610687578063f6927e7d146106a7578063f8b2cb4f146106c7578063feff17441461070a576101f1565b8063ddca3f43146105f4578063e00dd1611461063e578063e3d5c08c14610654578063ed64346214610674576101f1565b8063a480ca79116100d1578063a480ca7914610507578063c1e3bd3e14610527578063d266e83b14610554578063dc6f867c146105c7576101f1565b806384b0196e1461047f5780638da5cb5b146104a75780639738f87b146104d4578063a06412ac146104e7576101f1565b80633687f24a1161017a57806358db40d81161014957806358db40d8146103f2578063681b950d146104125780636999b3771461043257806379fa35071461045f576101f1565b80633687f24a146103655780633ed4c678146103855780634266580a146103a5578063450bde78146103d2576101f1565b80631aed59f0116101b65780631aed59f0146102775780631f6dc875146102c15780631fc6a5db1461031757806334fe228714610345576101f1565b806301fe1fdc14610202578063049878f3146102245780630ca522081461023757806314c9216a14610257576101f1565b366101f157600080fd5b3480156101fd57600080fd5b600080fd5b34801561020e57600080fd5b5061022261021d366004614590565b610758565b005b6102226102323660046145bc565b610cdd565b34801561024357600080fd5b506102226102523660046145bc565b611313565b34801561026357600080fd5b50610222610272366004614590565b61139e565b34801561028357600080fd5b506102976102923660046145d5565b611763565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102cd57600080fd5b506103076102dc36600461461b565b73ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205460ff1690565b60405190151581526020016102b8565b34801561032357600080fd5b506103376103323660046145bc565b6117ae565b6040519081526020016102b8565b34801561035157600080fd5b50610307610360366004614645565b6117fa565b34801561037157600080fd5b50610222610380366004614680565b611823565b34801561039157600080fd5b506102226103a036600461461b565b611905565b3480156103b157600080fd5b506006546102979073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103de57600080fd5b506103376103ed3660046146b3565b61199d565b3480156103fe57600080fd5b5061022261040d36600461461b565b611a0c565b34801561041e57600080fd5b5061022261042d366004614730565b611ad4565b34801561043e57600080fd5b506003546102979073ffffffffffffffffffffffffffffffffffffffff1681565b34801561046b57600080fd5b5061030761047a3660046147af565b6121fa565b34801561048b57600080fd5b50610494612219565b6040516102b8979695949392919061482e565b3480156104b357600080fd5b506000546102979073ffffffffffffffffffffffffffffffffffffffff1681565b6102226104e23660046148ed565b6122be565b3480156104f357600080fd5b50610337610502366004614952565b6128df565b34801561051357600080fd5b5061022261052236600461461b565b612927565b34801561053357600080fd5b506105476105423660046145bc565b612b56565b6040516102b8919061497c565b34801561056057600080fd5b5061030761056f366004614952565b6040805173ffffffffffffffffffffffffffffffffffffffff9390931660208085019190915283820192909252805180840382018152606090930181528251928201929092206000908152600c909152205460ff1690565b3480156105d357600080fd5b506105e76105e23660046145bc565b612bcf565b6040516102b89190614a29565b34801561060057600080fd5b5060045461061d906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016102b8565b34801561064a57600080fd5b5061033760055481565b34801561066057600080fd5b5061033761066f366004614b34565b612dbf565b610222610682366004614bbc565b612e42565b34801561069357600080fd5b506102226106a236600461461b565b6137aa565b3480156106b357600080fd5b506102226106c2366004614c4a565b61389b565b3480156106d357600080fd5b506103376106e236600461461b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205490565b34801561071657600080fd5b5061072a610725366004614c81565b613972565b604080516fffffffffffffffffffffffffffffffff90941684529115156020840152908201526060016102b8565b6000828152600b6020908152604080832060099092529091203233146107aa576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002820154700100000000000000000000000000000000900467ffffffffffffffff1615610804576040517f1fbde44500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16818460ff168154811061083057610830614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610889576040517fc394a43300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018281018054845473ffffffffffffffffffffffffffffffffffffffff16600081815260086020526040902080547001000000000000000000000000000000009093046fffffffffffffffffffffffffffffffff9081169384900390915583547fffffffffffffffffffffffffffffffff0000000000000000000000000000000081169082168490039091161790925583549092106109d957600086815260096020526040812061093a91614548565b6000868152600b6020908152604080832080547fffffffffffffffffff00000000000000000000000000000000000000000000001681556001810184905560020180547fffffff000000000000000000000000000000000000000000000000000000000016905551828152829189917f4fc9df21c274d2396432490df6fcda723ce987bc1b640015d34b26ca0ed98063910160405180910390a4610b41565b825483906109e990600190614d03565b815481106109f9576109f9614ca5565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838660ff1681548110610a3957610a39614ca5565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082805480610a9157610a91614d16565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190558254610af690607f614d03565b6002850180547fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600190931b6fffffffffffffffffffffffffffffffff91821618169190911790555b6040805133602080830191909152818301899052825180830384018152606090920183528151918101919091206000908152600c9091522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905573ffffffffffffffffffffffffffffffffffffffff8116610bfe5760405133906fffffffffffffffffffffffffffffffff841680156108fc02916000818181858888f19350505050158015610bf8573d6000803e3d6000fd5b50610ca8565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526fffffffffffffffffffffffffffffffff8316602482015273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303816000875af1158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca69190614d45565b505b604051339087907ff9b63d6ab6b86370bd291baf2443198e10294bc1a369e21ff12b34b904cb0fff90600090a3505050505050565b6000818152600b602052604090208054600182015473ffffffffffffffffffffffffffffffffffffffff9091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16333214610d6a576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002830154700100000000000000000000000000000000900467ffffffffffffffff1615610dc4576040517f1fbde44500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301546fffffffffffffffffffffffffffffffff16600003610e14576040517f477383f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602080830191909152818301879052825180830384018152606090920183528151918101919091206000818152600c9092529190205460ff1615610e88576040517e3b268200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260096020908152604080832080546002890180546fffffffffffffffffffffffffffffffff600160ff607f869003811682901b8316838516177fffffffffffffffffffffffffffffffff00000000000000000000000000000000948516179094558c810180548084168d01841694169390931790925573ffffffffffffffffffffffffffffffffffffffff8b168852600887528588208054918b169190910190558354808201855593875285872090930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055868652600c9094529190932080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255855474010000000000000000000000000000000000000000900416610fc082614d62565b91508160ff160361118957610fd6606342614d81565b60028601805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055845461104d9060ff7401000000000000000000000000000000000000000090910416613bde565b60028601805460ff929092167c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff90921691909117905560018501546000906110c5906fffffffffffffffffffffffffffffffff16613c20565b60018701546110e691906fffffffffffffffffffffffffffffffff16614da9565b6001870180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166fffffffffffffffffffffffffffffffff91821684900382161790915573ffffffffffffffffffffffffffffffffffffffff87166000908152600860205260408082208054938516909303909255905191925088917e6e0c97de781a7389d44ba8fd35d1467cabb17ed04d038d166d34ab819213f39190a2505b73ffffffffffffffffffffffffffffffffffffffff84166111f457826fffffffffffffffffffffffffffffffff1634146111ef576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112dc565b341561122c576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526fffffffffffffffffffffffffffffffff8416604482015273ffffffffffffffffffffffffffffffffffffffff8516906323b872dd906064016020604051808303816000875af11580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190614d45565b505b6005546040513391907fc0081eeafa0d002abcd7d58d84b6e688d1526b9c3d915a282212ba08c49a17a790600090a3505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600755565b6000828152600b602052604090206002810154700100000000000000000000000000000000900467ffffffffffffffff16333214611408576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff811615806114285750428167ffffffffffffffff16115b1561145f576040517f6f312cbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600960205260409020805433919060ff861690811061148557611485614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146114de576040517fc394a43300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282015482546000918291829161154b916fffffffffffffffffffffffffffffffff82169160ff7c010000000000000000000000000000000000000000000000000000000090910481169188917401000000000000000000000000000000000000000090910416613c5a565b9250925092508560ff16811461158d576040517fc6e1dd1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818061159e575061159e8387613dbd565b156115d5576040517f477383f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115df8387613de3565b611615576040517ff6fa148200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61161f8387613e1c565b6002860180546fffffffffffffffffffffffffffffffff929092167fffffff00ffffffffffffffffffffffff00000000000000000000000000000000909216919091177c010000000000000000000000000000000000000000000000000000000060ff891602177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004267ffffffffffffffff1602178082556018906116f8907801000000000000000000000000000000000000000000000000900463ffffffff16614dd2565b91906101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16877f537f4d0c896772cdfaaac608ab3c4705fe48cc44b3a2e63451b4a7eb9808ba1b60405160405180910390a350505050505050565b600082815260096020526040812080548390811061178357611783614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b600454600090612710906117d4906fffffffffffffffffffffffffffffffff1682614da9565b6117f0906fffffffffffffffffffffffffffffffff1684614df5565b6117a89190614e3b565b600081600281111561180e5761180e6149d6565b60ff16600754901c6001166001149050919050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611874576040517f48f5c3ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86fffffffffffffffffffffffffffffffff821611156118c2576040517ff4df6ae500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b60035473ffffffffffffffffffffffffffffffffffffffff163314611956576040517f48f5c3ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000601983836040516020016119e292919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b6040516020818303038152906040528051906020012060001c611a059190614e4f565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401611390565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000858152600b602052604090206002810154700100000000000000000000000000000000900467ffffffffffffffff16333214611b3e576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028201546fffffffffffffffffffffffffffffffff16600003611b8e576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81161580611bae5750428167ffffffffffffffff16115b15611be5576040517f6f312cbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000878152600960205260409020805433919060ff8916908110611c0b57611c0b614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614611c64576040517fc394a43300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028201547801000000000000000000000000000000000000000000000000900463ffffffff1615801590611cc8575060018254760100000000000000000000000000000000000000000000900460ff166001811115611cc657611cc66149d6565b145b15611e9b5760028201547801000000000000000000000000000000000000000000000000900463ffffffff1660408601358814611d31576040517ff5d2101e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8116611d486040880160208901614e63565b67ffffffffffffffff1614611d89576040517f63e0897a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dd7611d9b36889003880188614b34565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613e3f92505050565b8254611e0b90899063ffffffff841690760100000000000000000000000000000000000000000000900460ff168935613eb5565b15611e99576002830154611e55906fffffffffffffffffffffffffffffffff8116907c0100000000000000000000000000000000000000000000000000000000900460ff16613e1c565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff929092169190911790555b505b600282015482546000918291611f05916fffffffffffffffffffffffffffffffff81169160ff7c0100000000000000000000000000000000000000000000000000000000909204821691879174010000000000000000000000000000000000000000900416613c5a565b5091509150611f148289613de3565b611f4a576040517ff6fa148200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80158015611f5f5750611f5d8289613dbd565b155b15611f96576040517fa63065ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180850180547fffffffffffffffffffffffffffffffff000000000000000000000000000000008116909155855473ffffffffffffffffffffffffffffffffffffffff908116600090815260086020908152604080832080546fffffffffffffffffffffffffffffffff90961695869003905589548f8452600b835281842080547fffffffffffffffffff0000000000000000000000000000000000000000000000168155968701849055600290960180547fffffff00000000000000000000000000000000000000000000000000000000001690556009909152812092939091169161208391614548565b73ffffffffffffffffffffffffffffffffffffffff81166120e25760405133906fffffffffffffffffffffffffffffffff841680156108fc02916000818181858888f193505050501580156120dc573d6000803e3d6000fd5b5061218c565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526fffffffffffffffffffffffffffffffff8316602482015273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218a9190614d45565b505b6040516fffffffffffffffffffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff82169033908d907f4fc9df21c274d2396432490df6fcda723ce987bc1b640015d34b26ca0ed980639060200160405180910390a45050505050505050505050565b600081600181111561220e5761220e6149d6565b61180e906080614e7e565b60006060808280808361224d7f546f6e74696e65000000000000000000000000000000000000000000000000076001613f8d565b6122787f31000000000000000000000000000000000000000000000000000000000000016002613f8d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b3233146122f7576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260ff8416108061230c5750606460ff8416115b15612343576040517f59e59f3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836fffffffffffffffffffffffffffffffff1660000361238f576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612398826117fa565b15806123aa57506123a8816121fa565b155b156123e1576040517fa0042b1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166000908152600a602052604090205460ff16612440576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005546000908152600b60205260409020805460ff851674010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff88161717808255839082907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000008360028111156124fd576124fd6149d6565b02179055508054829082907fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000836001811115612554576125546149d6565b02179055506fffffffffffffffffffffffffffffffff851670010000000000000000000000000000000081027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682176001808501919091556002840180549092166f8000000000000000000000000000000017909155600580546000908152600960209081526040808320805480870182559084528284200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915573ffffffffffffffffffffffffffffffffffffffff8d16845260089092528220805490950190945581548301918290559192600c92916126ab9190612661908690614d03565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602082015290810182905260009060600160405160208183030381529060405280519060200120905092915050565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905573ffffffffffffffffffffffffffffffffffffffff861661275357846fffffffffffffffffffffffffffffffff16341461274e576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61283b565b341561278b576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526fffffffffffffffffffffffffffffffff8616604482015273ffffffffffffffffffffffffffffffffffffffff8716906323b872dd906064016020604051808303816000875af1158015612815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128399190614d45565b505b8573ffffffffffffffffffffffffffffffffffffffff16856fffffffffffffffffffffffffffffffff1660016005546128749190614d03565b6040517f7bc3e781453a761be4ae9daaacb192000aff04f1c45c3bf9ca9e118b4c9e2e9c90600090a460055433906128ae90600190614d03565b6040517fc0081eeafa0d002abcd7d58d84b6e688d1526b9c3d915a282212ba08c49a17a790600090a3505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff841660208083019190915281830184905282518083038401815260609092019092528051910120600090611a05565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a602052604090205460ff16612986576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116612a085760035473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260409020549116906108fc906129dc9047614d03565b6040518115909202916000818181858888f19350505050158015612a04573d6000803e3d6000fd5b5050565b60035473ffffffffffffffffffffffffffffffffffffffff828116600081815260086020526040908190205490517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919363a9059cbb93169184906370a0823190602401602060405180830381865afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190614e97565b612abf9190614d03565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015612b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a049190614d45565b50565b600081815260096020908152604091829020805483518184028101840190945280845260609392830182828015612bc357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311612b98575b50505050509050919050565b612c256040805161014081018252600080825260208201819052909182019081526020016000815260006020820181905260408201819052606082018190526080820181905260a0820181905260c09091015290565b6000828152600b6020908152604091829020825161014081018452815473ffffffffffffffffffffffffffffffffffffffff8116825260ff74010000000000000000000000000000000000000000820481169483019490945290939192918401917501000000000000000000000000000000000000000000909104166002811115612cb257612cb26149d6565b6002811115612cc357612cc36149d6565b81528154602090910190760100000000000000000000000000000000000000000000900460ff166001811115612cfb57612cfb6149d6565b6001811115612d0c57612d0c6149d6565b815260018201546fffffffffffffffffffffffffffffffff808216602084015270010000000000000000000000000000000091829004811660408401526002909301549283166060830152820467ffffffffffffffff1660808201527801000000000000000000000000000000000000000000000000820463ffffffff1660a08201527c010000000000000000000000000000000000000000000000000000000090910460ff1660c09091015292915050565b60006117a87fd133bbc7f95acfb85dec01a77edf5a7c3665782f8a05b72294c6bdf7fb8b115c836000015184602001518560400151604051602001612e279493929190938452602084019290925267ffffffffffffffff166040830152606082015260800190565b60405160208183030381529060405280519060200120614038565b6000868152600b602052604090206002810154700100000000000000000000000000000000900467ffffffffffffffff16333214612eac576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81161580612ecc5750428167ffffffffffffffff16115b15612f03576040517f6f312cbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000888152600960205260409020805433919060ff8a16908110612f2957612f29614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612f82576040517fc394a43300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028201547801000000000000000000000000000000000000000000000000900463ffffffff1615801590612fe6575060018254760100000000000000000000000000000000000000000000900460ff166001811115612fe457612fe46149d6565b145b1561317d5760028201547801000000000000000000000000000000000000000000000000900463ffffffff166040860135891461304f576040517ff5d2101e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff81166130666040880160208901614e63565b67ffffffffffffffff16146130a7576040517f63e0897a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130b9611d9b36889003880188614b34565b82546130ed908a9063ffffffff841690760100000000000000000000000000000000000000000000900460ff168935613eb5565b1561317b576002830154613137906fffffffffffffffffffffffffffffffff8116907c0100000000000000000000000000000000000000000000000000000000900460ff16613e1c565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff929092169190911790555b505b60028201548254600091829182916131ea916fffffffffffffffffffffffffffffffff82169160ff7c010000000000000000000000000000000000000000000000000000000090910481169188917401000000000000000000000000000000000000000090910416613c5a565b9250925092508960ff16811461322c576040517fc6e1dd1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818061323d575061323d838b613dbd565b15613274576040517f477383f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018501546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091048116908a16108015906132e05750600185547501000000000000000000000000000000000000000000900460ff1660028111156132de576132de6149d6565b145b1561331c576001850180546fffffffffffffffffffffffffffffffff808c167001000000000000000000000000000000000291161790556133d6565b600285547501000000000000000000000000000000000000000000900460ff16600281111561334d5761334d6149d6565b036133d6576127106133616103e882614eb0565b6001870154613396919070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16614ed9565b6133a09190614f05565b6001860180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790555b600185015460009061340d9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613c20565b60018701805491925082916000906134389084906fffffffffffffffffffffffffffffffff16614eb0565b82546101009290920a6fffffffffffffffffffffffffffffffff818102199093169183160217909155875473ffffffffffffffffffffffffffffffffffffffff166000908152600860205260408120805492851693509161349a908490614f34565b90915550506002860180547fffffff00ffffffff0000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004267ffffffffffffffff16027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c010000000000000000000000000000000000000000000000000000000060ff8e1602177fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff861617808255601890613593907801000000000000000000000000000000000000000000000000900463ffffffff16614dd2565b825463ffffffff9182166101009390930a9283029190920219909116179055855473ffffffffffffffffffffffffffffffffffffffff1661363657600186015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff163414613631576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61373a565b341561366e576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855460018701546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd906064016020604051808303816000875af1158015613714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137389190614d45565b505b60018601546040517001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff16815233908d907f34e592c5d9452abe7b4df38f36795ed86fbcded8a266d5bdeeaaf5375a8cf0d39060200160405180910390a3505050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461382b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401611390565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60005473ffffffffffffffffffffffffffffffffffffffff16331461391c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401611390565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000828152600b60209081526040808320815161014081018352815473ffffffffffffffffffffffffffffffffffffffff8116825260ff74010000000000000000000000000000000000000000820481169583019590955285948594859492908401917501000000000000000000000000000000000000000000909104166002811115613a0157613a016149d6565b6002811115613a1257613a126149d6565b81528154602090910190760100000000000000000000000000000000000000000000900460ff166001811115613a4a57613a4a6149d6565b6001811115613a5b57613a5b6149d6565b815260018201546fffffffffffffffffffffffffffffffff808216602084015270010000000000000000000000000000000091829004811660408401526002909301549283166060830152820467ffffffffffffffff90811660808301527801000000000000000000000000000000000000000000000000830463ffffffff1660a08301527c010000000000000000000000000000000000000000000000000000000090920460ff1660c09091015260e08201519192508116600003613b2e575060c00151925060009150819050613bd7565b600082610100015163ffffffff16118015613b5e5750600182606001516001811115613b5c57613b5c6149d6565b145b15613bb257613b828783610100015163ffffffff1684606001518960000135613eb5565b15613bb257613b9a8260c00151836101200151613e1c565b6fffffffffffffffffffffffffffffffff1660c08301525b613bce8260c0015183610120015160ff16838560200151613c5a565b94509450945050505b9250925092565b6000814442604051602001613bfd929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6117a89190614f47565b60045460009061271090613c46906fffffffffffffffffffffffffffffffff1682614da9565b613c509084614ed9565b6117a89190614f05565b60008060008360ff16600003613c7857506000915081905080613db3565b428567ffffffffffffffff161115613cbc5786600060ff8616613c9c896001614d81565b613ca69190614f69565b919450925067ffffffffffffffff169050613db3565b60006063613cd467ffffffffffffffff881642614d03565b613cde9190614e3b565b905060015b818111613d6d57600060ff8716613d048367ffffffffffffffff8c16614f34565b613d0e9190614e4f565b9050613d1a8a82613de3565b15613d5357613d298a82613dbd565b15613d42578995506001945060ff169250613db3915050565b613d4c8a82613e1c565b9950613d5a565b8260010192505b5080613d6581614f90565b915050613ce3565b50600060ff8616613d888367ffffffffffffffff8b16614f34565b613d93906001614f34565b613d9d9190614e4f565b905088613daa8a83613dbd565b90955093509150505b9450945094915050565b6000613dc98383613e1c565b6fffffffffffffffffffffffffffffffff16159392505050565b600080613df183607f614fc8565b60ff166001901b90508381166fffffffffffffffffffffffffffffffff166000141591505092915050565b600080613e2a83607f614fc8565b600160ff919091161b19841691505092915050565b6000613e4a83612dbf565b90506000613e588284614080565b60065490915073ffffffffffffffffffffffffffffffffffffffff808316911614613eaf576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60006001836001811115613ecb57613ecb6149d6565b03613f8157600082604051602001613ee591815260200190565b6040516020818303038152906040528051906020012060001c9050600060198787604051602001613f4592919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b6040516020818303038152906040528051906020012060001c613f689190614e4f565b905080613f76606484614e4f565b111592505050613f85565b5060005b949350505050565b606060ff8314613fa757613fa0836140a4565b90506117a8565b818054613fb390614fe1565b80601f0160208091040260200160405190810160405280929190818152602001828054613fdf90614fe1565b801561402c5780601f106140015761010080835404028352916020019161402c565b820191906000526020600020905b81548152906001019060200180831161400f57829003601f168201915b505050505090506117a8565b60006117a86140456140e3565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600061408f8585614220565b9150915061409c81614265565b509392505050565b606060006140b183614418565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60003073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000a9f25bac1e81d8558a1d738bbb275299333742b1614801561414957507f000000000000000000000000000000000000000000000000000000000000000146145b1561417357507f7ad6e81c91da69a1ef5c13b5ca89de3cab3f92d86b1a199e96b9b99cee30524590565b61421b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f334e12643f9c85949b6ae031ea883c9b9d84f92aa0c86caecbc35f2fe550bf45918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b60008082516041036142565760208301516040840151606085015160001a61424a87828585614459565b9450945050505061425e565b506000905060025b9250929050565b6000816004811115614279576142796149d6565b036142815750565b6001816004811115614295576142956149d6565b036142fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611390565b6002816004811115614310576143106149d6565b03614377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611390565b600381600481111561438b5761438b6149d6565b03612b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611390565b600060ff8216601f8111156117a8576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614490575060009050600361453f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156144e4573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166145385760006001925092505061453f565b9150600090505b94509492505050565b5080546000825590600052602060002090810190612b5391905b808211156145765760008155600101614562565b5090565b803560ff8116811461458b57600080fd5b919050565b600080604083850312156145a357600080fd5b823591506145b36020840161457a565b90509250929050565b6000602082840312156145ce57600080fd5b5035919050565b600080604083850312156145e857600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461458b57600080fd5b60006020828403121561462d57600080fd5b611a05826145f7565b80356003811061458b57600080fd5b60006020828403121561465757600080fd5b611a0582614636565b80356fffffffffffffffffffffffffffffffff8116811461458b57600080fd5b60006020828403121561469257600080fd5b611a0582614660565b803567ffffffffffffffff8116811461458b57600080fd5b600080604083850312156146c657600080fd5b823591506145b36020840161469b565b6000606082840312156146e857600080fd5b50919050565b60008083601f84011261470057600080fd5b50813567ffffffffffffffff81111561471857600080fd5b60208301915083602082850101111561425e57600080fd5b600080600080600060c0868803121561474857600080fd5b853594506147586020870161457a565b935061476787604088016146d6565b925060a086013567ffffffffffffffff81111561478357600080fd5b61478f888289016146ee565b969995985093965092949392505050565b80356002811061458b57600080fd5b6000602082840312156147c157600080fd5b611a05826147a0565b6000815180845260005b818110156147f0576020818501810151868301820152016147d4565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e08184015261486a60e084018a6147ca565b838103604085015261487c818a6147ca565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156148db578351835292840192918401916001016148bf565b50909c9b505050505050505050505050565b600080600080600060a0868803121561490557600080fd5b61490e866145f7565b945061491c60208701614660565b935061492a6040870161457a565b925061493860608701614636565b9150614946608087016147a0565b90509295509295909350565b6000806040838503121561496557600080fd5b61496e836145f7565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156149ca57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614998565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614a1557614a156149d6565b9052565b60028110614a1557614a156149d6565b815173ffffffffffffffffffffffffffffffffffffffff16815261014081016020830151614a5c602084018260ff169052565b506040830151614a6f6040840182614a05565b506060830151614a826060840182614a19565b506080830151614aa660808401826fffffffffffffffffffffffffffffffff169052565b5060a0830151614aca60a08401826fffffffffffffffffffffffffffffffff169052565b5060c0830151614aee60c08401826fffffffffffffffffffffffffffffffff169052565b5060e0830151614b0a60e084018267ffffffffffffffff169052565b506101008381015163ffffffff16908301526101208084015160ff8116828501525b505092915050565b600060608284031215614b4657600080fd5b6040516060810181811067ffffffffffffffff82111715614b90577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282358152614ba36020840161469b565b6020820152604083013560408201528091505092915050565b60008060008060008060e08789031215614bd557600080fd5b86359550614be56020880161457a565b9450614bf360408801614660565b9350614c0288606089016146d6565b925060c087013567ffffffffffffffff811115614c1e57600080fd5b614c2a89828a016146ee565b979a9699509497509295939492505050565b8015158114612b5357600080fd5b60008060408385031215614c5d57600080fd5b614c66836145f7565b91506020830135614c7681614c3c565b809150509250929050565b60008060808385031215614c9457600080fd5b823591506145b384602085016146d6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156117a8576117a8614cd4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215614d5757600080fd5b8151611a0581614c3c565b600060ff821660ff8103614d7857614d78614cd4565b60010192915050565b67ffffffffffffffff818116838216019080821115614da257614da2614cd4565b5092915050565b6fffffffffffffffffffffffffffffffff828116828216039080821115614da257614da2614cd4565b600063ffffffff808316818103614deb57614deb614cd4565b6001019392505050565b80820281158282048414176117a8576117a8614cd4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e4a57614e4a614e0c565b500490565b600082614e5e57614e5e614e0c565b500690565b600060208284031215614e7557600080fd5b611a058261469b565b60ff81811683821601908111156117a8576117a8614cd4565b600060208284031215614ea957600080fd5b5051919050565b6fffffffffffffffffffffffffffffffff818116838216019080821115614da257614da2614cd4565b6fffffffffffffffffffffffffffffffff818116838216028082169190828114614b2c57614b2c614cd4565b60006fffffffffffffffffffffffffffffffff80841680614f2857614f28614e0c565b92169190910492915050565b808201808211156117a8576117a8614cd4565b600060ff831680614f5a57614f5a614e0c565b8060ff84160691505092915050565b600067ffffffffffffffff80841680614f8457614f84614e0c565b92169190910692915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fc157614fc1614cd4565b5060010190565b60ff82811682821603908111156117a8576117a8614cd4565b600181811c90821680614ff557607f821691505b6020821081036146e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fdfea26469706673582212201ede09760f66a31d17f5e2a9522175e60e0ca768cea14188a402a917d3a7a6c564736f6c63430008150033
0x610160604052600480546001600160801b0319166101f41790553480156200002657600080fd5b506040516200554738038062005547833981016040819052620000499162000258565b6040805180820182526007815266546f6e74696e6560c81b6020808301919091528251808401845260018152603160f81b91810191909152600080546001600160a01b0319166001600160a01b0388169081178255935192939192879291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000db826001620001b6565b61012052620000ec816002620001b6565b61014052815160208084019190912060e052815190820120610100524660a0526200017a60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052600380546001600160a01b039384166001600160a01b031991821617909155600680549290931691161790555062000488565b6000602083511015620001d657620001ce83620001ef565b9050620001e9565b81620001e3848262000347565b5060ff90505b92915050565b600080829050601f8151111562000226578260405163305a27a960e01b81526004016200021d919062000413565b60405180910390fd5b8051620002338262000463565b179392505050565b80516001600160a01b03811681146200025357600080fd5b919050565b6000806000606084860312156200026e57600080fd5b62000279846200023b565b925062000289602085016200023b565b915062000299604085016200023b565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002cd57607f821691505b602082108103620002ee57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034257600081815260208120601f850160051c810160208610156200031d5750805b601f850160051c820191505b818110156200033e5782815560010162000329565b5050505b505050565b81516001600160401b03811115620003635762000363620002a2565b6200037b81620003748454620002b8565b84620002f4565b602080601f831160018114620003b357600084156200039a5750858301515b600019600386901b1c1916600185901b1785556200033e565b600085815260208120601f198616915b82811015620003e457888601518255948401946001909101908401620003c3565b5085821015620004035787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b81811015620004425785810183015185820160400152820162000424565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620002ee5760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051615064620004e3600039600061225201526000612227015260006141ca015260006141a2015260006140fd015260006141270152600061415101526150646000f3fe6080604052600436106101e75760003560e01c806384b0196e11610102578063ddca3f4311610095578063f2fde38b11610064578063f2fde38b14610687578063f6927e7d146106a7578063f8b2cb4f146106c7578063feff17441461070a576101f1565b8063ddca3f43146105f4578063e00dd1611461063e578063e3d5c08c14610654578063ed64346214610674576101f1565b8063a480ca79116100d1578063a480ca7914610507578063c1e3bd3e14610527578063d266e83b14610554578063dc6f867c146105c7576101f1565b806384b0196e1461047f5780638da5cb5b146104a75780639738f87b146104d4578063a06412ac146104e7576101f1565b80633687f24a1161017a57806358db40d81161014957806358db40d8146103f2578063681b950d146104125780636999b3771461043257806379fa35071461045f576101f1565b80633687f24a146103655780633ed4c678146103855780634266580a146103a5578063450bde78146103d2576101f1565b80631aed59f0116101b65780631aed59f0146102775780631f6dc875146102c15780631fc6a5db1461031757806334fe228714610345576101f1565b806301fe1fdc14610202578063049878f3146102245780630ca522081461023757806314c9216a14610257576101f1565b366101f157600080fd5b3480156101fd57600080fd5b600080fd5b34801561020e57600080fd5b5061022261021d366004614590565b610758565b005b6102226102323660046145bc565b610cdd565b34801561024357600080fd5b506102226102523660046145bc565b611313565b34801561026357600080fd5b50610222610272366004614590565b61139e565b34801561028357600080fd5b506102976102923660046145d5565b611763565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102cd57600080fd5b506103076102dc36600461461b565b73ffffffffffffffffffffffffffffffffffffffff166000908152600a602052604090205460ff1690565b60405190151581526020016102b8565b34801561032357600080fd5b506103376103323660046145bc565b6117ae565b6040519081526020016102b8565b34801561035157600080fd5b50610307610360366004614645565b6117fa565b34801561037157600080fd5b50610222610380366004614680565b611823565b34801561039157600080fd5b506102226103a036600461461b565b611905565b3480156103b157600080fd5b506006546102979073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103de57600080fd5b506103376103ed3660046146b3565b61199d565b3480156103fe57600080fd5b5061022261040d36600461461b565b611a0c565b34801561041e57600080fd5b5061022261042d366004614730565b611ad4565b34801561043e57600080fd5b506003546102979073ffffffffffffffffffffffffffffffffffffffff1681565b34801561046b57600080fd5b5061030761047a3660046147af565b6121fa565b34801561048b57600080fd5b50610494612219565b6040516102b8979695949392919061482e565b3480156104b357600080fd5b506000546102979073ffffffffffffffffffffffffffffffffffffffff1681565b6102226104e23660046148ed565b6122be565b3480156104f357600080fd5b50610337610502366004614952565b6128df565b34801561051357600080fd5b5061022261052236600461461b565b612927565b34801561053357600080fd5b506105476105423660046145bc565b612b56565b6040516102b8919061497c565b34801561056057600080fd5b5061030761056f366004614952565b6040805173ffffffffffffffffffffffffffffffffffffffff9390931660208085019190915283820192909252805180840382018152606090930181528251928201929092206000908152600c909152205460ff1690565b3480156105d357600080fd5b506105e76105e23660046145bc565b612bcf565b6040516102b89190614a29565b34801561060057600080fd5b5060045461061d906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016102b8565b34801561064a57600080fd5b5061033760055481565b34801561066057600080fd5b5061033761066f366004614b34565b612dbf565b610222610682366004614bbc565b612e42565b34801561069357600080fd5b506102226106a236600461461b565b6137aa565b3480156106b357600080fd5b506102226106c2366004614c4a565b61389b565b3480156106d357600080fd5b506103376106e236600461461b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205490565b34801561071657600080fd5b5061072a610725366004614c81565b613972565b604080516fffffffffffffffffffffffffffffffff90941684529115156020840152908201526060016102b8565b6000828152600b6020908152604080832060099092529091203233146107aa576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002820154700100000000000000000000000000000000900467ffffffffffffffff1615610804576040517f1fbde44500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16818460ff168154811061083057610830614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610889576040517fc394a43300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018281018054845473ffffffffffffffffffffffffffffffffffffffff16600081815260086020526040902080547001000000000000000000000000000000009093046fffffffffffffffffffffffffffffffff9081169384900390915583547fffffffffffffffffffffffffffffffff0000000000000000000000000000000081169082168490039091161790925583549092106109d957600086815260096020526040812061093a91614548565b6000868152600b6020908152604080832080547fffffffffffffffffff00000000000000000000000000000000000000000000001681556001810184905560020180547fffffff000000000000000000000000000000000000000000000000000000000016905551828152829189917f4fc9df21c274d2396432490df6fcda723ce987bc1b640015d34b26ca0ed98063910160405180910390a4610b41565b825483906109e990600190614d03565b815481106109f9576109f9614ca5565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838660ff1681548110610a3957610a39614ca5565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082805480610a9157610a91614d16565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190558254610af690607f614d03565b6002850180547fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600190931b6fffffffffffffffffffffffffffffffff91821618169190911790555b6040805133602080830191909152818301899052825180830384018152606090920183528151918101919091206000908152600c9091522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905573ffffffffffffffffffffffffffffffffffffffff8116610bfe5760405133906fffffffffffffffffffffffffffffffff841680156108fc02916000818181858888f19350505050158015610bf8573d6000803e3d6000fd5b50610ca8565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526fffffffffffffffffffffffffffffffff8316602482015273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303816000875af1158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca69190614d45565b505b604051339087907ff9b63d6ab6b86370bd291baf2443198e10294bc1a369e21ff12b34b904cb0fff90600090a3505050505050565b6000818152600b602052604090208054600182015473ffffffffffffffffffffffffffffffffffffffff9091169070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16333214610d6a576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002830154700100000000000000000000000000000000900467ffffffffffffffff1615610dc4576040517f1fbde44500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301546fffffffffffffffffffffffffffffffff16600003610e14576040517f477383f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602080830191909152818301879052825180830384018152606090920183528151918101919091206000818152600c9092529190205460ff1615610e88576040517e3b268200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260096020908152604080832080546002890180546fffffffffffffffffffffffffffffffff600160ff607f869003811682901b8316838516177fffffffffffffffffffffffffffffffff00000000000000000000000000000000948516179094558c810180548084168d01841694169390931790925573ffffffffffffffffffffffffffffffffffffffff8b168852600887528588208054918b169190910190558354808201855593875285872090930180547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055868652600c9094529190932080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909317909255855474010000000000000000000000000000000000000000900416610fc082614d62565b91508160ff160361118957610fd6606342614d81565b60028601805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055845461104d9060ff7401000000000000000000000000000000000000000090910416613bde565b60028601805460ff929092167c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff90921691909117905560018501546000906110c5906fffffffffffffffffffffffffffffffff16613c20565b60018701546110e691906fffffffffffffffffffffffffffffffff16614da9565b6001870180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166fffffffffffffffffffffffffffffffff91821684900382161790915573ffffffffffffffffffffffffffffffffffffffff87166000908152600860205260408082208054938516909303909255905191925088917e6e0c97de781a7389d44ba8fd35d1467cabb17ed04d038d166d34ab819213f39190a2505b73ffffffffffffffffffffffffffffffffffffffff84166111f457826fffffffffffffffffffffffffffffffff1634146111ef576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112dc565b341561122c576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526fffffffffffffffffffffffffffffffff8416604482015273ffffffffffffffffffffffffffffffffffffffff8516906323b872dd906064016020604051808303816000875af11580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da9190614d45565b505b6005546040513391907fc0081eeafa0d002abcd7d58d84b6e688d1526b9c3d915a282212ba08c49a17a790600090a3505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600755565b6000828152600b602052604090206002810154700100000000000000000000000000000000900467ffffffffffffffff16333214611408576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff811615806114285750428167ffffffffffffffff16115b1561145f576040517f6f312cbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848152600960205260409020805433919060ff861690811061148557611485614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146114de576040517fc394a43300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282015482546000918291829161154b916fffffffffffffffffffffffffffffffff82169160ff7c010000000000000000000000000000000000000000000000000000000090910481169188917401000000000000000000000000000000000000000090910416613c5a565b9250925092508560ff16811461158d576040517fc6e1dd1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818061159e575061159e8387613dbd565b156115d5576040517f477383f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115df8387613de3565b611615576040517ff6fa148200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61161f8387613e1c565b6002860180546fffffffffffffffffffffffffffffffff929092167fffffff00ffffffffffffffffffffffff00000000000000000000000000000000909216919091177c010000000000000000000000000000000000000000000000000000000060ff891602177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004267ffffffffffffffff1602178082556018906116f8907801000000000000000000000000000000000000000000000000900463ffffffff16614dd2565b91906101000a81548163ffffffff021916908363ffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16877f537f4d0c896772cdfaaac608ab3c4705fe48cc44b3a2e63451b4a7eb9808ba1b60405160405180910390a350505050505050565b600082815260096020526040812080548390811061178357611783614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1690505b92915050565b600454600090612710906117d4906fffffffffffffffffffffffffffffffff1682614da9565b6117f0906fffffffffffffffffffffffffffffffff1684614df5565b6117a89190614e3b565b600081600281111561180e5761180e6149d6565b60ff16600754901c6001166001149050919050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611874576040517f48f5c3ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86fffffffffffffffffffffffffffffffff821611156118c2576040517ff4df6ae500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b60035473ffffffffffffffffffffffffffffffffffffffff163314611956576040517f48f5c3ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000601983836040516020016119e292919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b6040516020818303038152906040528051906020012060001c611a059190614e4f565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401611390565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000858152600b602052604090206002810154700100000000000000000000000000000000900467ffffffffffffffff16333214611b3e576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028201546fffffffffffffffffffffffffffffffff16600003611b8e576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81161580611bae5750428167ffffffffffffffff16115b15611be5576040517f6f312cbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000878152600960205260409020805433919060ff8916908110611c0b57611c0b614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614611c64576040517fc394a43300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028201547801000000000000000000000000000000000000000000000000900463ffffffff1615801590611cc8575060018254760100000000000000000000000000000000000000000000900460ff166001811115611cc657611cc66149d6565b145b15611e9b5760028201547801000000000000000000000000000000000000000000000000900463ffffffff1660408601358814611d31576040517ff5d2101e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8116611d486040880160208901614e63565b67ffffffffffffffff1614611d89576040517f63e0897a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dd7611d9b36889003880188614b34565b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613e3f92505050565b8254611e0b90899063ffffffff841690760100000000000000000000000000000000000000000000900460ff168935613eb5565b15611e99576002830154611e55906fffffffffffffffffffffffffffffffff8116907c0100000000000000000000000000000000000000000000000000000000900460ff16613e1c565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff929092169190911790555b505b600282015482546000918291611f05916fffffffffffffffffffffffffffffffff81169160ff7c0100000000000000000000000000000000000000000000000000000000909204821691879174010000000000000000000000000000000000000000900416613c5a565b5091509150611f148289613de3565b611f4a576040517ff6fa148200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80158015611f5f5750611f5d8289613dbd565b155b15611f96576040517fa63065ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180850180547fffffffffffffffffffffffffffffffff000000000000000000000000000000008116909155855473ffffffffffffffffffffffffffffffffffffffff908116600090815260086020908152604080832080546fffffffffffffffffffffffffffffffff90961695869003905589548f8452600b835281842080547fffffffffffffffffff0000000000000000000000000000000000000000000000168155968701849055600290960180547fffffff00000000000000000000000000000000000000000000000000000000001690556009909152812092939091169161208391614548565b73ffffffffffffffffffffffffffffffffffffffff81166120e25760405133906fffffffffffffffffffffffffffffffff841680156108fc02916000818181858888f193505050501580156120dc573d6000803e3d6000fd5b5061218c565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526fffffffffffffffffffffffffffffffff8316602482015273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb906044016020604051808303816000875af1158015612166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218a9190614d45565b505b6040516fffffffffffffffffffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff82169033908d907f4fc9df21c274d2396432490df6fcda723ce987bc1b640015d34b26ca0ed980639060200160405180910390a45050505050505050505050565b600081600181111561220e5761220e6149d6565b61180e906080614e7e565b60006060808280808361224d7f00000000000000000000000000000000000000000000000000000000000000006001613f8d565b6122787f00000000000000000000000000000000000000000000000000000000000000006002613f8d565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b3233146122f7576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260ff8416108061230c5750606460ff8416115b15612343576040517f59e59f3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836fffffffffffffffffffffffffffffffff1660000361238f576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612398826117fa565b15806123aa57506123a8816121fa565b155b156123e1576040517fa0042b1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166000908152600a602052604090205460ff16612440576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005546000908152600b60205260409020805460ff851674010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff88161717808255839082907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000008360028111156124fd576124fd6149d6565b02179055508054829082907fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000836001811115612554576125546149d6565b02179055506fffffffffffffffffffffffffffffffff851670010000000000000000000000000000000081027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090811682176001808501919091556002840180549092166f8000000000000000000000000000000017909155600580546000908152600960209081526040808320805480870182559084528284200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915573ffffffffffffffffffffffffffffffffffffffff8d16845260089092528220805490950190945581548301918290559192600c92916126ab9190612661908690614d03565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602082015290810182905260009060600160405160208183030381529060405280519060200120905092915050565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905573ffffffffffffffffffffffffffffffffffffffff861661275357846fffffffffffffffffffffffffffffffff16341461274e576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61283b565b341561278b576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526fffffffffffffffffffffffffffffffff8616604482015273ffffffffffffffffffffffffffffffffffffffff8716906323b872dd906064016020604051808303816000875af1158015612815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128399190614d45565b505b8573ffffffffffffffffffffffffffffffffffffffff16856fffffffffffffffffffffffffffffffff1660016005546128749190614d03565b6040517f7bc3e781453a761be4ae9daaacb192000aff04f1c45c3bf9ca9e118b4c9e2e9c90600090a460055433906128ae90600190614d03565b6040517fc0081eeafa0d002abcd7d58d84b6e688d1526b9c3d915a282212ba08c49a17a790600090a3505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff841660208083019190915281830184905282518083038401815260609092019092528051910120600090611a05565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a602052604090205460ff16612986576040517fc891add200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116612a085760035473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260409020549116906108fc906129dc9047614d03565b6040518115909202916000818181858888f19350505050158015612a04573d6000803e3d6000fd5b5050565b60035473ffffffffffffffffffffffffffffffffffffffff828116600081815260086020526040908190205490517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919363a9059cbb93169184906370a0823190602401602060405180830381865afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190614e97565b612abf9190614d03565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015612b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a049190614d45565b50565b600081815260096020908152604091829020805483518184028101840190945280845260609392830182828015612bc357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311612b98575b50505050509050919050565b612c256040805161014081018252600080825260208201819052909182019081526020016000815260006020820181905260408201819052606082018190526080820181905260a0820181905260c09091015290565b6000828152600b6020908152604091829020825161014081018452815473ffffffffffffffffffffffffffffffffffffffff8116825260ff74010000000000000000000000000000000000000000820481169483019490945290939192918401917501000000000000000000000000000000000000000000909104166002811115612cb257612cb26149d6565b6002811115612cc357612cc36149d6565b81528154602090910190760100000000000000000000000000000000000000000000900460ff166001811115612cfb57612cfb6149d6565b6001811115612d0c57612d0c6149d6565b815260018201546fffffffffffffffffffffffffffffffff808216602084015270010000000000000000000000000000000091829004811660408401526002909301549283166060830152820467ffffffffffffffff1660808201527801000000000000000000000000000000000000000000000000820463ffffffff1660a08201527c010000000000000000000000000000000000000000000000000000000090910460ff1660c09091015292915050565b60006117a87fd133bbc7f95acfb85dec01a77edf5a7c3665782f8a05b72294c6bdf7fb8b115c836000015184602001518560400151604051602001612e279493929190938452602084019290925267ffffffffffffffff166040830152606082015260800190565b60405160208183030381529060405280519060200120614038565b6000868152600b602052604090206002810154700100000000000000000000000000000000900467ffffffffffffffff16333214612eac576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81161580612ecc5750428167ffffffffffffffff16115b15612f03576040517f6f312cbd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000888152600960205260409020805433919060ff8a16908110612f2957612f29614ca5565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612f82576040517fc394a43300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028201547801000000000000000000000000000000000000000000000000900463ffffffff1615801590612fe6575060018254760100000000000000000000000000000000000000000000900460ff166001811115612fe457612fe46149d6565b145b1561317d5760028201547801000000000000000000000000000000000000000000000000900463ffffffff166040860135891461304f576040517ff5d2101e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff81166130666040880160208901614e63565b67ffffffffffffffff16146130a7576040517f63e0897a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130b9611d9b36889003880188614b34565b82546130ed908a9063ffffffff841690760100000000000000000000000000000000000000000000900460ff168935613eb5565b1561317b576002830154613137906fffffffffffffffffffffffffffffffff8116907c0100000000000000000000000000000000000000000000000000000000900460ff16613e1c565b6002840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff929092169190911790555b505b60028201548254600091829182916131ea916fffffffffffffffffffffffffffffffff82169160ff7c010000000000000000000000000000000000000000000000000000000090910481169188917401000000000000000000000000000000000000000090910416613c5a565b9250925092508960ff16811461322c576040517fc6e1dd1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818061323d575061323d838b613dbd565b15613274576040517f477383f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018501546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000009091048116908a16108015906132e05750600185547501000000000000000000000000000000000000000000900460ff1660028111156132de576132de6149d6565b145b1561331c576001850180546fffffffffffffffffffffffffffffffff808c167001000000000000000000000000000000000291161790556133d6565b600285547501000000000000000000000000000000000000000000900460ff16600281111561334d5761334d6149d6565b036133d6576127106133616103e882614eb0565b6001870154613396919070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16614ed9565b6133a09190614f05565b6001860180546fffffffffffffffffffffffffffffffff9283167001000000000000000000000000000000000292169190911790555b600185015460009061340d9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16613c20565b60018701805491925082916000906134389084906fffffffffffffffffffffffffffffffff16614eb0565b82546101009290920a6fffffffffffffffffffffffffffffffff818102199093169183160217909155875473ffffffffffffffffffffffffffffffffffffffff166000908152600860205260408120805492851693509161349a908490614f34565b90915550506002860180547fffffff00ffffffff0000000000000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004267ffffffffffffffff16027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c010000000000000000000000000000000000000000000000000000000060ff8e1602177fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff861617808255601890613593907801000000000000000000000000000000000000000000000000900463ffffffff16614dd2565b825463ffffffff9182166101009390930a9283029190920219909116179055855473ffffffffffffffffffffffffffffffffffffffff1661363657600186015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff163414613631576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61373a565b341561366e576040517faa82224900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855460018701546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201527001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd906064016020604051808303816000875af1158015613714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137389190614d45565b505b60018601546040517001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff16815233908d907f34e592c5d9452abe7b4df38f36795ed86fbcded8a266d5bdeeaaf5375a8cf0d39060200160405180910390a3505050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461382b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401611390565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60005473ffffffffffffffffffffffffffffffffffffffff16331461391c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401611390565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000828152600b60209081526040808320815161014081018352815473ffffffffffffffffffffffffffffffffffffffff8116825260ff74010000000000000000000000000000000000000000820481169583019590955285948594859492908401917501000000000000000000000000000000000000000000909104166002811115613a0157613a016149d6565b6002811115613a1257613a126149d6565b81528154602090910190760100000000000000000000000000000000000000000000900460ff166001811115613a4a57613a4a6149d6565b6001811115613a5b57613a5b6149d6565b815260018201546fffffffffffffffffffffffffffffffff808216602084015270010000000000000000000000000000000091829004811660408401526002909301549283166060830152820467ffffffffffffffff90811660808301527801000000000000000000000000000000000000000000000000830463ffffffff1660a08301527c010000000000000000000000000000000000000000000000000000000090920460ff1660c09091015260e08201519192508116600003613b2e575060c00151925060009150819050613bd7565b600082610100015163ffffffff16118015613b5e5750600182606001516001811115613b5c57613b5c6149d6565b145b15613bb257613b828783610100015163ffffffff1684606001518960000135613eb5565b15613bb257613b9a8260c00151836101200151613e1c565b6fffffffffffffffffffffffffffffffff1660c08301525b613bce8260c0015183610120015160ff16838560200151613c5a565b94509450945050505b9250925092565b6000814442604051602001613bfd929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6117a89190614f47565b60045460009061271090613c46906fffffffffffffffffffffffffffffffff1682614da9565b613c509084614ed9565b6117a89190614f05565b60008060008360ff16600003613c7857506000915081905080613db3565b428567ffffffffffffffff161115613cbc5786600060ff8616613c9c896001614d81565b613ca69190614f69565b919450925067ffffffffffffffff169050613db3565b60006063613cd467ffffffffffffffff881642614d03565b613cde9190614e3b565b905060015b818111613d6d57600060ff8716613d048367ffffffffffffffff8c16614f34565b613d0e9190614e4f565b9050613d1a8a82613de3565b15613d5357613d298a82613dbd565b15613d42578995506001945060ff169250613db3915050565b613d4c8a82613e1c565b9950613d5a565b8260010192505b5080613d6581614f90565b915050613ce3565b50600060ff8616613d888367ffffffffffffffff8b16614f34565b613d93906001614f34565b613d9d9190614e4f565b905088613daa8a83613dbd565b90955093509150505b9450945094915050565b6000613dc98383613e1c565b6fffffffffffffffffffffffffffffffff16159392505050565b600080613df183607f614fc8565b60ff166001901b90508381166fffffffffffffffffffffffffffffffff166000141591505092915050565b600080613e2a83607f614fc8565b600160ff919091161b19841691505092915050565b6000613e4a83612dbf565b90506000613e588284614080565b60065490915073ffffffffffffffffffffffffffffffffffffffff808316911614613eaf576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60006001836001811115613ecb57613ecb6149d6565b03613f8157600082604051602001613ee591815260200190565b6040516020818303038152906040528051906020012060001c9050600060198787604051602001613f4592919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b6040516020818303038152906040528051906020012060001c613f689190614e4f565b905080613f76606484614e4f565b111592505050613f85565b5060005b949350505050565b606060ff8314613fa757613fa0836140a4565b90506117a8565b818054613fb390614fe1565b80601f0160208091040260200160405190810160405280929190818152602001828054613fdf90614fe1565b801561402c5780601f106140015761010080835404028352916020019161402c565b820191906000526020600020905b81548152906001019060200180831161400f57829003601f168201915b505050505090506117a8565b60006117a86140456140e3565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600061408f8585614220565b9150915061409c81614265565b509392505050565b606060006140b183614418565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561414957507f000000000000000000000000000000000000000000000000000000000000000046145b1561417357507f000000000000000000000000000000000000000000000000000000000000000090565b61421b604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b60008082516041036142565760208301516040840151606085015160001a61424a87828585614459565b9450945050505061425e565b506000905060025b9250929050565b6000816004811115614279576142796149d6565b036142815750565b6001816004811115614295576142956149d6565b036142fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611390565b6002816004811115614310576143106149d6565b03614377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611390565b600381600481111561438b5761438b6149d6565b03612b53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611390565b600060ff8216601f8111156117a8576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115614490575060009050600361453f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156144e4573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166145385760006001925092505061453f565b9150600090505b94509492505050565b5080546000825590600052602060002090810190612b5391905b808211156145765760008155600101614562565b5090565b803560ff8116811461458b57600080fd5b919050565b600080604083850312156145a357600080fd5b823591506145b36020840161457a565b90509250929050565b6000602082840312156145ce57600080fd5b5035919050565b600080604083850312156145e857600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461458b57600080fd5b60006020828403121561462d57600080fd5b611a05826145f7565b80356003811061458b57600080fd5b60006020828403121561465757600080fd5b611a0582614636565b80356fffffffffffffffffffffffffffffffff8116811461458b57600080fd5b60006020828403121561469257600080fd5b611a0582614660565b803567ffffffffffffffff8116811461458b57600080fd5b600080604083850312156146c657600080fd5b823591506145b36020840161469b565b6000606082840312156146e857600080fd5b50919050565b60008083601f84011261470057600080fd5b50813567ffffffffffffffff81111561471857600080fd5b60208301915083602082850101111561425e57600080fd5b600080600080600060c0868803121561474857600080fd5b853594506147586020870161457a565b935061476787604088016146d6565b925060a086013567ffffffffffffffff81111561478357600080fd5b61478f888289016146ee565b969995985093965092949392505050565b80356002811061458b57600080fd5b6000602082840312156147c157600080fd5b611a05826147a0565b6000815180845260005b818110156147f0576020818501810151868301820152016147d4565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e08184015261486a60e084018a6147ca565b838103604085015261487c818a6147ca565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156148db578351835292840192918401916001016148bf565b50909c9b505050505050505050505050565b600080600080600060a0868803121561490557600080fd5b61490e866145f7565b945061491c60208701614660565b935061492a6040870161457a565b925061493860608701614636565b9150614946608087016147a0565b90509295509295909350565b6000806040838503121561496557600080fd5b61496e836145f7565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156149ca57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101614998565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614a1557614a156149d6565b9052565b60028110614a1557614a156149d6565b815173ffffffffffffffffffffffffffffffffffffffff16815261014081016020830151614a5c602084018260ff169052565b506040830151614a6f6040840182614a05565b506060830151614a826060840182614a19565b506080830151614aa660808401826fffffffffffffffffffffffffffffffff169052565b5060a0830151614aca60a08401826fffffffffffffffffffffffffffffffff169052565b5060c0830151614aee60c08401826fffffffffffffffffffffffffffffffff169052565b5060e0830151614b0a60e084018267ffffffffffffffff169052565b506101008381015163ffffffff16908301526101208084015160ff8116828501525b505092915050565b600060608284031215614b4657600080fd5b6040516060810181811067ffffffffffffffff82111715614b90577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405282358152614ba36020840161469b565b6020820152604083013560408201528091505092915050565b60008060008060008060e08789031215614bd557600080fd5b86359550614be56020880161457a565b9450614bf360408801614660565b9350614c0288606089016146d6565b925060c087013567ffffffffffffffff811115614c1e57600080fd5b614c2a89828a016146ee565b979a9699509497509295939492505050565b8015158114612b5357600080fd5b60008060408385031215614c5d57600080fd5b614c66836145f7565b91506020830135614c7681614c3c565b809150509250929050565b60008060808385031215614c9457600080fd5b823591506145b384602085016146d6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156117a8576117a8614cd4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215614d5757600080fd5b8151611a0581614c3c565b600060ff821660ff8103614d7857614d78614cd4565b60010192915050565b67ffffffffffffffff818116838216019080821115614da257614da2614cd4565b5092915050565b6fffffffffffffffffffffffffffffffff828116828216039080821115614da257614da2614cd4565b600063ffffffff808316818103614deb57614deb614cd4565b6001019392505050565b80820281158282048414176117a8576117a8614cd4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614e4a57614e4a614e0c565b500490565b600082614e5e57614e5e614e0c565b500690565b600060208284031215614e7557600080fd5b611a058261469b565b60ff81811683821601908111156117a8576117a8614cd4565b600060208284031215614ea957600080fd5b5051919050565b6fffffffffffffffffffffffffffffffff818116838216019080821115614da257614da2614cd4565b6fffffffffffffffffffffffffffffffff818116838216028082169190828114614b2c57614b2c614cd4565b60006fffffffffffffffffffffffffffffffff80841680614f2857614f28614e0c565b92169190910492915050565b808201808211156117a8576117a8614cd4565b600060ff831680614f5a57614f5a614e0c565b8060ff84160691505092915050565b600067ffffffffffffffff80841680614f8457614f84614e0c565b92169190910692915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614fc157614fc1614cd4565b5060010190565b60ff82811682821603908111156117a8576117a8614cd4565b600181811c90821680614ff557607f821691505b6020821081036146e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fdfea26469706673582212201ede09760f66a31d17f5e2a9522175e60e0ca768cea14188a402a917d3a7a6c564736f6c63430008150033000000000000000000000000a92bfe11459e75c994dc612d4f64b7f2935a732d000000000000000000000000a92bfe11459e75c994dc612d4f64b7f2935a732d0000000000000000000000006b572731fd736a4e78f7307e27d8a2cba622ca02